Java™ is a programming language that, at the source code level, is similar to object oriented programming languages such as C++. Java language source code is compiled into an intermediate representation being a plurality “bytecodes” that define specific tasks. In some implementations, the bytecodes are further compiled to machine language for a particular processor. In order to speed the execution of Java language programs, some processors are specifically designed to execute some of the Java bytecodes directly. Many times, a processor that directly executes Java bytecodes is paired with a general purpose processor so as to accelerate Java program execution.
In systems where processors are paired, the processor that directly executes Java bytecodes relies on calls to library routines executed on the second processor to perform graphics functions. The calls to library routines executed on the second processor are referred to as calls to “native” library routines through a Java Native Interface (JNI). In order for the native library routines to operate, parameters are passed between the processors by way of the main memory. However, active data locations are stored in each processor's data cache, and the corresponding main memory locations may not reflect the latest parameter values. In order for the parameters to reside in the main memory when a native library routine is invoked thus requires the calling processor to flush its data cache. Likewise, the processor that executes the native library routine may evict data from its data cache in order to obtain the parameters. The evicted data is later re-loaded when the native library routines completes their tasks Because of the data cache flush and eviction mechanism to exchange parameters, calling native library routines from the processor directly executing Java bytecodes results in slow system performance regarding graphics operations.